我有一个问题,由于以前人们的设计决策不好,我被迫在链接表中有两列应始终互斥.我见过SQL-Server:将列定义为互斥但MySQL不强制执行CHECK约束,所以我正在寻找其他选项.有没有办法在两列之间强制互斥?
让我解释一下如果有人看到更好的解决方案.
以前的dev/admins构建了两个表,它们基本上记录了相同类型的东西.我有一个新的表,理论上是1 - >他们都代表的东西.所以我的两个选项似乎是创建两个桥接表或一个带有两个外部键引用的桥接表.对于我来说,这两个表似乎是一个丑陋的解决方案,我希望避免这种情况,但是未强制的互斥字段使我容易受到腐败的影响.
具体的例子,因为我不能分享我的真实案例:
Table 'full_time_students' stores full time students
Table 'part_time_students' store part time students
Table 'class' will store class info
Table 'class_students' should store which students are in which class
Run Code Online (Sandbox Code Playgroud)
在一个理想的世界里,我会把两个学生表结合起来,但是有很多代码会破坏,我没有时间/意愿去修复所有这些,所以我现在不得不处理现有的模式/数据.我正在使用InnoDB,所以我已经计划在student_ids上设置外键约束,但就像我说的那样,如果我用一个包含两列的表格,我就会打开自己的行,同时使用两个ID.
写出来几乎说服我重新考虑2表解决方案......
我有两个名字tab1和表tab2.
TAB1是P&rimary key is price并且price is foreign key in tab2,它是on delete set null.
当我primary key从tab2中存在的tab1中删除一个相应的外键
设置为NULL.
现在我想从tab2中删除其外键为null的行.
我写这个查询,但它不起作用.
delete from tab2 where price = null.
Run Code Online (Sandbox Code Playgroud)
请帮我解决一下.
有关
与我的其他问题相关:
数据设计
假设我有一个标签表:
tblTags
-------------
TagID (int)
Name (string)
Run Code Online (Sandbox Code Playgroud)
还有两个内容表:
tblBlogs
-------------
Anchor (GUID, Primary Key)
BlogTitle (string)
+ More custom fields
tblTutorials
-------------
Anchor (GUID, Primary Key)
TutorialTitle (string)
+ More custom fields
Run Code Online (Sandbox Code Playgroud)
还会有更多带有锚点的表格,它不仅仅是2.
然后将标签与上述实体相关联:
tblTagAnchors
-------------
TagID (int, Foreign Key)
Anchor (GUID, Foreign Key)
Run Code Online (Sandbox Code Playgroud)
我的问题是,一旦我建立了博客和教程与特定标签的关联,有没有办法编写一个查询来返回带有特定标签的博客或教程?无需对博客和教程进行单独查询?
主要用途是搜索,类似于(伪):
select from tblBlogs and tblTutorials where the GUID exists in tblTagAnchors where tagID = 5
for each record returned
if record from Blog
response.write("<a href=blogView.aspx?ID=" + recID)
else if record …Run Code Online (Sandbox Code Playgroud) sql database-design guid foreign-keys foreign-key-relationship
我有一张叫做custom_carts桌子的桌子custom_cart_items.
custom_cart_items有一个custom_cart_id被设置为的外键custom_cart.id
根据Cake Manual,当你调用Model-> delete()时,第一个参数是你要删除的条目的id,第二个参数是否是级联删除依赖条目.
所以当我打电话时,$this->CustomCart->delete(7,true)我得到这个错误:
SQL错误:1451:无法删除或更新父行:外键约束失败(
custom_carts.custom_cart_items,CONSTRAINTcustom_cart_itemsFOREIGN KEY(custom_cart_id)REFERENCEScustom_cart.id($this->CustomCart->delete(7,true)))
这是查询:
DELETE `CustomCart`
FROM `custom_carts` AS `CustomCart`
LEFT JOIN `users` AS `User`
ON (`CustomCart`.`user_id` = `User`.`id`)
WHERE `CustomCart`.`id` = 25
Run Code Online (Sandbox Code Playgroud)
它不应该级联和dlete其他条目吗?
那我为什么会收到错误?
我正在尝试将数据从Excel电子表格导出到相当复杂的关系数据库中.电子表格通过声明其他对象的名称来指示"外键".(幸运的是,我对电子表格有一些控制权,所以我可以保证这些名称是唯一的,并且它们引用的对象实际存在).
我有一个程序可以在MSSql数据库中重新创建这些表,但它不能自动将它们相互链接.此外,我不想使用对象的实际名称作为主键,因为最终数据库将很大.
因此,如果我有许多现有但未连接的表通过其"名称"字段相互引用,我如何添加通过其ID链接它们的外键?
我所拥有的简化版本:
Parent
ID: 1 (PK)
Name: Mary
Child
ID: 2 (PK)
Name: Jane
ParentName: Mary
Run Code Online (Sandbox Code Playgroud)
而我想要实现的目标:
Child
ID: 2 (PK)
Name: Jane
ParentID: 1 (FK)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!我无法找到如何在事后添加外键映射或在不同字段上添加外键映射的示例.
专门考虑网络应用,
(1)为什么RDBMS中的关系(即:外键)甚至有用?
我编写的Web应用程序具有内置逻辑,可根据必填字段验证用户输入.我认为没有真正使用外键,因此没有真正用于关系数据库.
此外,如果我将所有必需的字段验证逻辑放在RDBMS中(即:MySQL),它只会返回一个模糊的错误.至少使用基于PHP的验证我知道哪个字段丢失了,我可以通知用户(尽管使用基于Javascript的验证,这几乎不会发生).
(2)过去有没有一点RDBMS由于某种原因是有用的,或者是否因为我不知道它们是有用的?
我真的需要对这个话题有所了解.我简直无法想出一个好的答案.
我想问你路由器的最佳解决方案.
我的数据库(文章,页面,类别等)中有一些表都有ID.我想为每个人生成特定的URL,例如./en/article/25-This-is-an-test-article.
但如何摆脱的/条,/页,...?用户不希望看到它 - 它只是增加了网址的长度......
我的第一个想法是简单的路由器表:
CREATE TABLE `router` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` varchar(50) NOT NULL,
`entity_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
但是有一个致命的问题 - 不可能为enitity_id列设置外键,因为它应该引用更多列,这在SQL中是不可能的.
我的问题是:你认为我应该坚持使用该解决方案(并忽略外键)或者我应该忘记它并在URL中附加类型?
假设我有一个表"节点",我存储一棵树.每个节点都有一个主键id和一个parent_id列.当然,我想访问每个节点实例的父属性,即关系.有人可能会尝试:
import sqlalchemy, sqlalchemy.orm, sqlalchemy.ext.declarative
engine = sqlalchemy.create_engine('sqlite:///PATHTOMYDATABASE', echo=True)
Base = sqlalchemy.ext.declarative.declarative_base()
class Node(Base):
__tablename__ = "nodes"
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
parent_id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("nodes.id"))
parent = sqlalchemy.orm.relationship("Node", backref=sqlalchemy.orm.backref("childs"))
Base.metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到一个错误:
sqlalchemy.exc.InvalidRequestError: Table 'nodes' is already defined for this MetaData instance. Specify 'useexisting=True' to redefine options and columns on an existing Table object.
我不明白我可以在什么时候设置这个选项'useexisting=True'.这是正确的方法吗?
编辑:事实上,错误来自原始脚本的另一部分.如果用临时数据库替换数据库路径:memory:,它可以正常工作.感谢TokenMacGuy.
因此,上面的例子可以被视为一个工作示例.
嗨,
我有一个包含外键值(id)的表.此字段可以为null但问题是如果我将其设置为null,则会出现以下异常:
INSERT语句与FOREIGN KEY约束冲突
为什么?它是可以为空的
编辑1:
USE [biss]
GO
/****** Object: Table [dbo].[VoucherCodes] Script Date: 10/16/2011 19:55:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[VoucherCodes](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Code] [nvarchar](50) NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NOT NULL,
[InactivatedDate] [datetime] NULL,
[AdCategoryId] [int] NULL,
CONSTRAINT [PK_VoucherCodes] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON …Run Code Online (Sandbox Code Playgroud) 我的旅行项目架构的一部分有以下表格
Cruises
Flights
Hotels
CarParking
Run Code Online (Sandbox Code Playgroud)
我需要一个容器,将一个或多个这些产品包装成一个包装.一个游轮/酒店等可能是许多套餐的一部分.我最初想到的
Package
- PackageId
- Etc
PackageItem
- PackageItemId
- PackageId (fk)
- ItemId (fk)
- ItemType
Run Code Online (Sandbox Code Playgroud)
其中ItemType表示它是Cruise,Flight,Hotel等.我想我可以使用Triggers来强制引用完整性.
我的另一个想法是
Package
- ...
PackageItem
- PackageItemId
- PackageId (fk)
- CruiseId (nullable fk)
- FlightId (nullable fk)
- HotelId (nullable fk)
- CarParkingId (nullable fk)
- etc
Run Code Online (Sandbox Code Playgroud)
我想每个人都有利有弊,但我无法决定.你觉得哪个更好,如果你必须实现这样的话,你会选择哪个?
数据库是MySql.平台是C#MVC ASP.NET
(我做了搜索,但也有一些相似的问题,但没有任何相应的问题)
foreign-keys ×10
mysql ×5
sql ×4
cakephp ×1
constraints ×1
database ×1
guid ×1
mapping ×1
php ×1
python ×1
rdbms ×1
routes ×1
spreadsheet ×1
sql-server ×1
sqlalchemy ×1
url-routing ×1