【问题标题】:SQL Server key holds list of keysSQL Server 键保存键列表
【发布时间】:2017-12-10 19:22:25
【问题描述】:

我有以下代码:

CREATE TABLE SONGS 
( 
       ...
       ISWC VARCHAR(15) PRIMARY KEY
);

CREATE TABLE SESSIONS 
(
       ... 
       RECORDED_SONGS VARCHAR(15),
       FOREIGN KEY (RECORDED_SONGS) REFERENCES SONGS(ISWC)
);

RECORDED_SONGS 我想保留会话期间录制的许多歌曲的ISWCs,用逗号分隔。现在我只能在那里存储一个ISWC。我无法更改RECORDED_SONGS 的类型,因为这样就会出现不同类型的问题。有可能吗?

【问题讨论】:

    标签: sql sql-server database


    【解决方案1】:

    不要将歌曲列表存储在分隔列表中。这很糟糕,很糟糕,很糟糕,很糟糕:

    • SQL 的字符串处理功能很差。
    • 您不能声明外键关系。
    • 您无法验证进入字符串的值。
    • SQL 有更好的存储列表的方法。

    正确的存储方法是使用联结表,在每个会话中每首歌曲一行:

    CREATE TABLE SESSIONSONGS (
       SESSIONID . . .,.
       ISWC VARCHAR(15),
       FOREIGN KEY (ISWC) REFERENCES SONGS(ISWC),
       FOREIGNKEY (SESSIONID) REFERENCES SESSIONS(SESSIONID)
    )
    

    【讨论】:

    • 原始设计违反了核心关系数据库设计原则 1) 仅存储原子数据 2) 没有重复组。
    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多