2015-02-09 77 views
0

有3個表格用戶和歌曲列表(一對多),1個用戶可以有1個或更多歌曲列表。 SubList(一對多)到SongList。 SongList可以是公開的(全部可見),私人的(只有所有者可以查看)和友好的(所有者+一些其他用戶)。也許對於SubList應該是相同的(私有,公共...),但現在它並不重要。創建帶有說明屬性的表訪問歌曲列表

這樣做會更好嗎?

CREATE TABLE IF NOT EXISTS `mydb`.`user` (
    `username` VARCHAR(45) NULL, 
    `password` VARCHAR(45) NULL, 
    `id` INT NOT NULL, 
    PRIMARY KEY (`id`)) 
ENGINE = InnoDB 


CREATE TABLE IF NOT EXISTS `mydb`.`song_list` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `title` VARCHAR(100) NOT NULL, 
    `cretaed` DATE NOT NULL, 
    `updated` DATE NULL, 
    `user_id` INT NULL, 
    PRIMARY KEY (`id`), 
    INDEX `fk_group_user1_idx` (`user_id` ASC), 
    CONSTRAINT `fk_group_user1` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `mydb`.`user` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

CREATE TABLE IF NOT EXISTS `mydb`.`subgroup` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `title` VARCHAR(100) NULL, 
    `created` DATE NULL, 
    `updated` DATE NULL, 
    `song_list_id` INT NOT NULL, 
    PRIMARY KEY (`id`, `song_list_id`), 
    INDEX `fk_subgroup_song_list1_idx` (`song_list_id` ASC), 
    CONSTRAINT `fk_subgroup_song_list1` 
    FOREIGN KEY (`song_list_id`) 
    REFERENCES `mydb`.`song_list` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

謝謝。

+0

你的問題是什麼? – 2015-02-09 21:42:15

回答

1

只需直接建模即可。添加另一個表格
AccessType (AccessTypeID int, AccessTypeName varchar(200))
這裏插入記錄例如1-public,2-private等。然後在你的表中
SongList和SubSongList添加AccessTypeID列和
使它們成爲指向AccessType表的外鍵(FK)。
像AccessType這樣的表通常稱爲查找表。