我有一张表格,列有表格、评价者、日期和级别。
表单不可能有相同的评估师,表单永远不会有相同的层次。
我试着做主键(表单,鉴定者)和主键(表单,级别),但是它说表单有多个主键。
如果我把主键(表单,评价器,级别),人们只需插入相同的表单和鉴定两次,但只是一个不同的级别,这违反了我的规则。
|Form|Appraiser|Level|
1 A 1
1 B 2
1 C 3
2 A 1
2 B 2
2 C 3发布于 2019-05-08 09:40:14
我相信你可以:-
CREATE TABLE IF NOT EXISTS mytable (form INTEGER, appraiser TEXT, level INTEGER, UNIQUE(form,appraiser), UNIQUE(form,level));例如,使用以下方法
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (form INTEGER, appraiser TEXT, level INTEGER, UNIQUE(form,appraiser), UNIQUE(form,level));
INSERT INTO mytable VALUES
(1,'A',1),(1,'B',2),(1,'C',3),
(2,'A',1),(2,'B',2),(2,'C',3)
;
INSERT OR IGNORE INTO mytable VALUES (1,'A',4);
INSERT OR IGNORE INTO mytable values (1,'Z',1);结果如下:
INSERT INTO mytable VALUES
(1,'A',1),(1,'B',2),(1,'C',3),
(2,'A',1),(2,'B',2),(2,'C',3)
> Affected rows: 6
> Time: 0.083s但
INSERT OR IGNORE INTO mytable VALUES (1,'A',4)
> Affected rows: 0
> Time: 0s而且还
INSERT OR IGNORE INTO mytable values (1,'Z',1)
> Affected rows: 0
> Time: 0s发布于 2019-05-08 07:08:11
我们可以在这里尝试使用两个连接表:
CREATE TABLE form_appraiser (
form_id INTEGER NOT NULL,
appraiser_id INTEGER NOT NULL,
PRIMARY KEY (form_id, appraiser_id)
);
CREATE TABLE form_level (
form_id INTEGER NOT NULL,
level_id INTEGER NOT NULL,
PRIMARY KEY (form_id, level_id)
);这两个表格中的每一个都将确保给定的表格只能与单个评估人员或级别相关联。
然后,维护包含每个唯一表单的一个记录的第三个表forms。如果您有这样的附加要求,即给定的表单只能有一个评估师或级别,那么在一个/两个连接表上对表单添加一个唯一的约束。
发布于 2019-05-08 07:15:57
您可以尝试将唯一约束添加为列标识符。
喜欢
鉴定人VARCHAR(50)唯一,形式VARCHAR(50)唯一,级别VARCHAR(50)唯一,
在这种情况下,不重复这些值。如果要组合不重复的值,则可以使用唯一(窗体、级别)--这意味着不能重复同一级别的窗体。
https://stackoverflow.com/questions/56035212
复制相似问题