Вы должны удалить авторов из таблицы Publications и создать третью таблицу, которая связывает пользователей с публикациями.
PublicationAuthors
PublicationID int
UserID int
Тогда ваши запросы могут просто проверить эту таблицу, чтобы увидеть, связан ли пользователь с публикацией.,Кроме того, вы можете иметь столько авторов, сколько вам нужно, без добавления новых столбцов в публикации, и если кто-то изменит их имя, это не нарушит отношения с публикациями.
Вот пример (я использовал SQL Server для этого, так чтомогут быть небольшие синтаксические различия):
CREATE TABLE Publications(
[PublicationID] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](128) NOT NULL,
[DatePublished] [DateTime]
PRIMARY KEY CLUSTERED
(
[PublicationID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE Authors(
[AuthorID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](128) NOT NULL,
[LastName] [nvarchar](128) NOT NULL
PRIMARY KEY CLUSTERED
(
[AuthorID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE PublicationAuthors(
[PublicationID] [int],
[AuthorID] [int]
PRIMARY KEY CLUSTERED
(
[PublicationID] ASC,
[AuthorID]
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO Publications (Title, DatePublished) VALUES ('Sphere', '5/12/1987')
INSERT INTO Publications (Title, DatePublished) VALUES ('Jurassic Park', '11/1/1990')
INSERT INTO Authors (FirstName, LastName) VALUES ('Michael', 'Chricton')
INSERT INTO Authors (FirstName, LastName) VALUES ('Andy', 'McKenna')
INSERT INTO PublicationAuthors (PublicationID, AuthorID) VALUES (1, 1)
INSERT INTO PublicationAuthors (PublicationID, AuthorID) VALUES (2, 1)
INSERT INTO PublicationAuthors (PublicationID, AuthorID) VALUES (2, 2)
--All Authors for this Publication
SELECT p.Title, p.DatePublished, a.FirstName, a.LastName
FROM Publications p
INNER JOIN PublicationAuthors pa
ON pa.PublicationID = p.PublicationID
INNER JOIN Authors a
ON a.AuthorID = pa.AuthorID
WHERE p.PublicationID = 2
--All Publications for this Author
SELECT p.Title, p.DatePublished, a.FirstName, a.LastName
FROM Authors a
INNER JOIN PublicationAuthors pa
ON pa.AuthorID = a.AuthorID
INNER JOIN Publications p
ON pa.PublicationID = p.PublicationID
WHERE a.AuthorID = 1
Затем, когда вы поймете, что я неправильно написал фамилию автора, вы можете просто обновить эту строку, не касаясь таблицы публикаций.