sql-server - 如何将 1:1 关系转换为 1:N 关系
问题描述
我有一个没有很好实施的数据库 SQL 和一些问题。
1.fk 似乎不能很好地工作我必须进行单独的查询以在所有表中添加一个值,
第一个表很奇怪,但它是正确的,它必须与其他表分开(我要添加、取消、修改)同时在 tab tabList 和 tabSE 中。
我必须在 tabSE 和 tabSD 之间实现 1:N 关系(不知道该怎么做)实际上目标是选择(形成 c# bla bla bla)一堆项目,单击开始并将信息存储在例如,在 mm/dd/yyyy 的那一天,我用 id (1,5,3,6,8) 开始了项目(通过单击按钮开始),开始得到了结果 bla bla bla,它结束了日 mm/dd/yyyy。我认为Union 可能是没有意义的,从tabSD 可能Nome 我不必存在,不知道。帮助
解决方案
从上到下:
如果您在 tabStoreExec 和 tabStoricoDetail 之间有一个 FK,则您可以自动执行的唯一两件事是UPDATE和DELETE使用关键字(或配置表的选项)CASCADE
我想这是一个“临时”表,用作接口实用程序的背面。
用于制作 1:N。我认为最好的是删除表 Union,然后您必须在 tabStoricoDetail 上创建一个复合键,例如 id 和 idDetail ,让 FK 完成他的工作,只链接两个表的 id :
tabStoreExec.idSE -> tabStoricoDetail.id
我给你一些CREATE TABLES代码示例,可以按照你的意愿工作:
CREATE TABLE tabStoreExec (
idSE INT --PRIMARY KEY --Coul be done here, but can't be named
, nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
, DateStarSE DATE --or DATETIME, depends if you want the time too
, DateEndSE DATE
, CONSTRAINT PK_tabStoreExec PRIMARY KEY (id)
, CONSTRAINT FK_tabStoreExec_idSE_id FOREIGN KEY (idSE) REFERENCES tabStoricoDetail(id) ON DELETE CASCADE ON UPDATE CASCADE --use this in case you want to propagate the delete/update action from this table to referenced.
);
CREATE TABLE tabStoricoDetail (
id INT
, idDetail INT
, nomeItem VARCHAR(100) NOT NULL --or maybe could be NULL
, resItemDet VARCHAR(100)
, CONSTRAINT PK_tabStoricoDetail PRIMARY KEY (id, idDetail)
);
我希望这对你有帮助。
编辑: 是的,联合表可以消失。
FK 是两个表之间的“连接器”,它为您提供数据完整性,并且复合 PK 可以具有 1:N 关系。我在这里给你一个示例模式以获得更好的帮助:
推荐阅读
- ios - 为什么我的代表只通过数组的第一个成员?
- python - 通过 PyCharm 运行的脚本比直接在命令行中运行时执行得更好
- python - 使用 sympy 查找梯度并绘制向量场
- c++ - 这个编译器错误是什么意思 - C++中的“'='标记之前的声明中的限定ID”?
- python - 在 DataFrame 切片上设置列值不起作用
- google-apps-script - 域范围的委派
- css - 如何使用 CSS 删除嵌套链接的下划线和颜色?
- flutter - iPhone上的Flutter Camera Plugin横向视频
- c++ - BufferView 中的字节偏移量大于字节长度
- node.js - 将 SASS 添加到 React 项目会阻碍 Yarn Start