Sql 删除外键行时如何在数据库中保留条目
我的数据库设置如下:Sql 删除外键行时如何在数据库中保留条目,sql,ruby,Sql,Ruby,我的数据库设置如下: CREATE TABLE farms ( id SERIAL8 primary key, name VARCHAR(255) not null, address VARCHAR(255), phone_num VARCHAR(255) ); CREATE TABLE products ( id SERIAL8 primary key, name VARCHAR(255) not null, description VARCHAR(255),
CREATE TABLE farms
(
id SERIAL8 primary key,
name VARCHAR(255) not null,
address VARCHAR(255),
phone_num VARCHAR(255)
);
CREATE TABLE products
(
id SERIAL8 primary key,
name VARCHAR(255) not null,
description VARCHAR(255),
stock FLOAT,
cost FLOAT,
price FLOAT,
farm_id INT8 references farms(id)
)
我遇到的问题是,当我删除一个服务器场时,它也会删除该服务器场中可用的所有产品,但我只想删除该服务器场,而不想删除该产品
这是我删除农场的方法
def delete
sql = "DELETE FROM farms WHERE id = $1"
values = [@id]
SqlRunner.run(sql, values)
end
是我如何构建表的问题,还是我的SQL语句不正确?mysql SQL server postgresql。我删除了相互冲突的标签,请添加相关的标签。你为什么要这样做?如果您不想删除产品,那么必须关闭级联(或RDBMS等效功能),但是,引用不存在的外键的
外键
是不受信任的外键,因此是毫无意义的外键
。您看到的行为是经过设计的。不删除产品将导致孤立记录,这可能会浪费空间,使数据库效率低下,甚至返回错误的结果。我建议你阅读一些数据库设计教程。也许你想要一个产品和农场的链接表,这样一个产品就可以独立存在,没有、一个或多个农场生产它?还是每种产品都是农场特有的?在这种情况下,如果农场倒闭,保留产品是没有意义的。大多数sql数据库允许其他行为,例如,您可以尝试删除集NULLmysql sql server postgresql。我删除了相互冲突的标签,请添加相关的标签。你为什么要这样做?如果您不想删除产品,那么必须关闭级联(或RDBMS等效功能),但是,引用不存在的外键的外键
是不受信任的外键,因此是毫无意义的外键
。您看到的行为是经过设计的。不删除产品将导致孤立记录,这可能会浪费空间,使数据库效率低下,甚至返回错误的结果。我建议你阅读一些数据库设计教程。也许你想要一个产品和农场的链接表,这样一个产品就可以独立存在,没有、一个或多个农场生产它?还是每种产品都是农场特有的?在这种情况下,如果农场倒闭,保留产品是没有意义的。大多数sql数据库允许其他行为,例如,您可以尝试删除集NULL