gpt4 book ai didi

c# - 如何处理相互/递归相关的表?

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:59 25 4
gpt4 key购买 nike

我对数据库和 sql 还很陌生。我有一个问题,我有两个表都包含另一个主键的外键。我的问题是我有大量元素可以有不同语言的多个名称,但必须有一个主要名称/语言。 alt text http://img688.imageshack.us/img688/1121/11768540.png

首先,我想知道这是否可行,还是我应该放弃?显而易见的解决方案是在 ElementName 表中有一个额外的 bool 字段来表示 IsDefaultName,但它为查询和更新增加了一些额外的复杂性。如果这是最佳解决方案,如果设置了 IsDefaultName 并且该表已经有一个具有相同 ElementIdIsDefaultName 设置(或者我需要手动查询吗)?

我在这里尝试使用 LINQ to SQL。我用来尝试插入新项目的代码在 SubmitChanges 处抛出异常,其中 INSERT 语句与 FOREIGN KEY 约束“FK_ElementName_Element”冲突。 我能理解这是为什么,但想知道是否有修复/更好的解决方案。

var db = new MyDBDataContext();
var element = new Element();
var elementName = new ElementName() {
ElementName1 = "MyElement",
Language = "English",
};
element.ElementName = elementName;

db.Elements.InsertOnSubmit(element);
db.ElementNames.InsertOnSubmit(elementName);
db.SubmitChanges();

最佳答案

解决方案一

element
------------------
element_id
~....

element_name
------------------
element_name_id
fk_element_id
name
language_id
is_default_name Default ( 0 )

Trigger:
if ( ( select count ( 1 ) from element_name where is_default_name = 1 ) > 1 )
BEGIN
raisError ( 'only 1 element_name may be marked is_default_name = true.', 16, 1 );
END

方案二

element
------------------
element_id ( pk )
~....

element_name
------------------
element_name_id ( pk )
fk_element_id
name
language_id

element_name_default
------------------
fk_element_id
fk_element_name_id
( pk - fk_element_id, fk_element_name_id )

方案三

element
------------------
element_id
fk_element_name_id_default NULL
~....

element_name
------------------
element_name_id
fk_element_id
name
language_id

order of code:
* Insert to element_name
* update of element

我会坚持你所拥有的,因为它很好,只是:

db.Elements.InsertOnSubmit(element);
db.ElementNames.InsertOnSubmit(elementName);
//I don't know this syntax to say
// set the property of element.fk_element_name_id_default
// to the newly inserted elementName from above
db.Elements.?.?

关于c# - 如何处理相互/递归相关的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com