在 RDBMS 中,如何确保一个属性对具有该属性的所有记录呈现相同的某些其他属性
In RDBMS, how to ensure that an attribute renders certain other attributes same for all records having that attribute
Table :
SOFTWARE
----------------
PNAME (VARCHAR),
TITLE (VARCHAR),
DEVIN (VARCHAR),
SCOST (NUMBER),
DCOST (NUMBER),
SOLD (NUMBER)
如何确保每当我将值插入 table 时,TITLE
、COSTS
和 SOLD
列在用作集合时都具有相同的值?即,每当列 TITLE
具有值 x
时,列 SCOST
、DCOST
和 SOLD
具有相同的值 a , b
和 c
对于 TITLE
为 x
的所有记录,PNAME
and/or DEVIN
可能会有所不同。
"In RDBMS, how to ensure that an attribute renders certain other attributes same for all records having that attribute"
通过规范化您的数据结构。 TITLE
、SCOST
、DCOST
和 SOLD
需要单独的 table。主键大概 TITLE
.
您现有的 table 有一个引用这个新 table 的外键。
按照 的建议,规范化您的表格。像这样:
CREATE TABLE software_titles (
title VARCHAR2(200)
CONSTRAINT software_titles__title__pk PRIMARY KEY,
scost NUMBER,
dcost NUMBER,
sold NUMBER
);
CREATE TABLE software_development (
title VARCHAR2(200)
CONSTRAINT software_dev__title__nn NOT NULL
CONSTRAINT software_dev__title__fk REFERENCES software_titles ( title ),
pname VARCHAR2(200),
devin VARCHAR2(200)
);
CREATE VIEW software IS
SELECT t.*,
d.pname,
d.devin
FROM software_titles t
INNER JOIN
software_development d
ON ( t.title = d.title );
Table :
SOFTWARE
----------------
PNAME (VARCHAR),
TITLE (VARCHAR),
DEVIN (VARCHAR),
SCOST (NUMBER),
DCOST (NUMBER),
SOLD (NUMBER)
如何确保每当我将值插入 table 时,TITLE
、COSTS
和 SOLD
列在用作集合时都具有相同的值?即,每当列 TITLE
具有值 x
时,列 SCOST
、DCOST
和 SOLD
具有相同的值 a , b
和 c
对于 TITLE
为 x
的所有记录,PNAME
and/or DEVIN
可能会有所不同。
"In RDBMS, how to ensure that an attribute renders certain other attributes same for all records having that attribute"
通过规范化您的数据结构。 TITLE
、SCOST
、DCOST
和 SOLD
需要单独的 table。主键大概 TITLE
.
您现有的 table 有一个引用这个新 table 的外键。
按照
CREATE TABLE software_titles (
title VARCHAR2(200)
CONSTRAINT software_titles__title__pk PRIMARY KEY,
scost NUMBER,
dcost NUMBER,
sold NUMBER
);
CREATE TABLE software_development (
title VARCHAR2(200)
CONSTRAINT software_dev__title__nn NOT NULL
CONSTRAINT software_dev__title__fk REFERENCES software_titles ( title ),
pname VARCHAR2(200),
devin VARCHAR2(200)
);
CREATE VIEW software IS
SELECT t.*,
d.pname,
d.devin
FROM software_titles t
INNER JOIN
software_development d
ON ( t.title = d.title );