回答

收藏

列中的唯一值,但仅对于每个关联的外键是唯一的

技术问答 技术问答 280 人阅读 | 0 人回复 | 2023-09-12

我为令人困惑的标题道歉,但我真的不确定如何用一句话来描述这个问题。
6 N# G1 T+ Y8 v我有一个用于一般小费竞赛的SQLite数据库。对于那些不熟悉这个概念的人来说,他们认为在体育比赛的每一轮比赛中获胜的人都会得到小费,而在比赛结束时得到最正确小费的人(奖品可能是金钱和骄傲)
/ b* _3 R1 f( F' V" u7 P; y0 _  f,等等)。AFL在澳大利亚很受欢迎。
; m( t4 K! L0 B( x基本结构是用户注册为所有者,然后他们可以根据需要创建任何数量的竞争,每个竞争都使用外部键链接。这是数据库模式的相关部分:
) }5 P; Q; m# K+ t/ y5 o/ `% v! c: Ucreate table owner  owner_id INTEGER NOT NULL,   owner_name VARCHAR NOT NULL,   owner_nick VARCHAR UNIQUE NOT NULL,   owner_email VARCHAR NOT NULL,   owner_password VARCHAR NOT NULL,   CONSTRAINT owner_pk PRIMARY KEY (owner_id));create table comp  comp_id INTEGER NOT NULL,   comp_owner_id INTEGER NOT NULL,   comp_name VARCHAR UNIQUE NOT NULL,   CONSTRAINT comp_pk PRIMARY KEY (comp_id),   CONSTRAINT comp_owner_fk FOREIGN KEY (comp_owner_id) REFERENCES owner (owner_id) NOT DEFERRABLE);问题的要点是:我想在comp表的comp_name唯一的约束(如上所示)被强制用于字段,因为单个所有者不应该有两个或两个以上的同名竞争。然而,两个不同的所有者完全有可能想要两个同名的不同比赛(例如,两个办公室为同一体育联盟举办小费比赛)。它可以使用SQL强制执行此操作,还是需要在其他地方手动执行?
) e) W' T2 D/ S+ q2 T1 c' }+ c注:7 g# f9 H9 b# D& W
我正在使用SQLite 3.6.20.实施适当的外键约束
( S4 U/ k$ F5 Q- k# }  H* j# q该数据库永远不会用于生产级应用程序。这是一个私人项目。
  r. O* U( E6 o: w: n( _8 P基于这个数据库Web的PHP在应用程序中使用。
4 l/ n& S" ^/ u- \; G9 J9 _假如不能用SQLite如果实现了,可以用MySQL做到吗?
编辑:我想我应该指出,我知道SQLite对alter table支持非常有限,删除数据库并重新开始是一个很大的选择。& ?) e/ _# L$ B
                                                               
) O- K  Q" P- j4 B$ R( r0 t, z    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则