聽起來好像你正在尋找一個允許存在多對多關係的中間連接表。我可能會建議這樣的表格模式:
CREATE TABLE User
(
UniqueID uniqueidentifier NOT NULL Primary Key default newid(),
FirstName nvarchar(100) NOT NULL,
etc..
)
CREATE TABLE Book
(
UniqueID uniqueidentifier NOT NULL Primary Key default newid(),
Title nvarchar(100) NOT NULL,
etc..
)
CREATE TABLE Activity
(
UniqueID uniqueidentifier NOT NULL Primary Key default newid(),
Description nvarchar(100) NOT NULL,
etc...
)
CREATE TABLE UserActivity
(
UserID uniqueidentifier NOT NULL,
BookID uniqueidentifier NOT NULL,
ActivityID uniqueidentifier NOT NULL,
CONSTRAINT PK_UserActivity PRIMARY KEY CLUSTERED
(
UserID ASC,
BookID ASC,
ActivityID ASC
)
)
這樣,許多用戶可以爲許多書籍進行許多活動。數據庫設計的最佳實踐建議您不要使用FirstName作爲主鍵,因爲許多人可能擁有相同的名字。你會想要一些像int域或uniqueidentifier獨特的東西。
書和活動相似 - 它們存儲不同的書(「書1」,「書2」)以及可以執行的不同類型的活動(「完成活動1」,「完成活動2」)。
每次用戶完成書籍的活動時,記錄都會插入到描述用戶,書籍和執行的活動的UserActivity中。
雖然在這一點上看起來似乎有些過分,但如果您決定在某個時間點添加功能,您不會後悔 - 比如添加新類型的活動,或者新書不會「不像其他書籍那樣具有相同類型的活動。一個設計良好的數據庫應該能夠很容易地爲你的軟件添加新的東西。快樂的編碼。