在我的 Laravel 应用程序中,我有一张名为“研究”的表,另一个名为“论文”的表。它们具有一对多的关系,其中每个研究可以有一篇或多篇论文。在论文迁移文件中,我使用以下命令创建了外键约束:
//foreign key for the research model
$table->unsignedBigInteger('research_id');
$table->index('researach_id');
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个新的迁移来添加级联 onDelete,以便在删除其父研究时删除论文。我该怎么做?我正在使用 Laravel 5.1
编辑
所以答案与接受的答案非常相似,只是我必须先删除该列,然后添加外键。因为我还没有进入生产环境,所以删除列不是问题,但如果您处于生产环境中,您最终可能会弄乱数据库中数据的一致性。所以要小心
这听起来像是一个愚蠢的问题,因为实际上有数百个教程。
但无论我按照哪个教程创建 a foreign key,或者在我的例子中创建 a composite foreign key,即使表创建总是成功,MySQL Workbench 也不会显示任何foreign key信息。
如果我创建这两个示例表
CREATE TABLE parent (
id INT NOT NULL,
category VARCHAR(255) NOT NULL,
PRIMARY KEY (id, category)
);
CREATE TABLE child (
id INT PRIMARY KEY,
category VARCHAR(255) NOT NULL,
info TEXT,
CONSTRAINT fk FOREIGN KEY (id, category) REFERENCES parent(id, category)
);
Run Code Online (Sandbox Code Playgroud)
我缺少什么?这确实是很奇怪的行为,它们既不是 MySQL Workbench 显示的错误也不是警告。
我正在开发一个应用程序,它将用作其他应用程序的可扩展框架.
其中一个基本类称为Node,而Nodes具有Content.SQL表看起来像这样:
TABLE节点(NodeId int,....等)
TABLE NodeContentRelationship(NodeId int,ContentType string,ContentId int)
扩展应用程序的开发人员将创建自己的内容类型.
显然,从关系数据库的角度来看,这是不好的,因为无法向NodeContentRelationship.ContentId添加外键关系,即使它是外键列.
但是,解决方案非常简单和强大,所以我不愿意改变它.
你觉得怎么样 - 我是否在追寻一个痛苦的世界?
我有一个在一个表中只有6个字符的列,它使用外键约束引用一个20个字符的列.我该如何解决?
注意:问题是由于Oracle SQL Developer Edit表的限制.当我执行特定的更改列时,它工作正常.
我在使用mysql的netbeans中使用JPA,我需要定义一个外键.我想以图形方式进行,因为使用netbeans 6.7 UI创建表非常容易,而无需处理SQL命令.你能告诉我怎么做吗?
我有这个架构:
CREATE TABLE `lotto`.`combinaciones` (
`indice` mediumint(8) unsigned NOT NULL,
`binario` int(10) unsigned NOT NULL,
PRIMARY KEY USING BTREE (`indice`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `lotto`.`sorteo` (
`numeroSorteo` int(11) NOT NULL,
`fechaSorteo` date NOT NULL,
`precioCarton` double NOT NULL,
`valorSerial` double NOT NULL,
`valorMiniserial` double NOT NULL,
`estatusSorteo` int(11) NOT NULL,
`cantidadCartones` int(11) NOT NULL,
PRIMARY KEY (`numeroSorteo`),
UNIQUE KEY `fechaSorteo` (`fechaSorteo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `lotto`.`cartones` (
`numeroSorteo` int(11) NOT NULL,
`serial` mediumint(9) NOT NULL,
`indice` …Run Code Online (Sandbox Code Playgroud) 我有两张桌子,Proteins和Species.Protein有Species.Id外键约束.当我插入数据时,我知道蛋白质所属物种的名称,但不知道Id.所以我做了以下事情:
PreparedStatement query = connection.prepareStatement(
"SELECT Id FROM Species WHERE ShortName = ?");
query.setString(1, protein.getSpecies().getShortName());
ResultSet result = query.executeQuery();
if (result.next()) {
PreparedStatement statement = connection.prepareStatement(
"INSERT INTO Proteins(SpeciesId, UniProtKBAccessionNumber) VALUES (?, ?)");
statement.setString(1, result.getString(1));
statement.setString(2, protein.getUniProtKBAccessionNumber().toString());
statement.execute();
}
else
throw new IllegalArgumentException("The species of this protein is not recognized!");
Run Code Online (Sandbox Code Playgroud)
基本上,我得到与名称对应的Id,然后插入蛋白质.这在许多方面看起来非常笨拙.是否有更优雅的方式来实现这一目标?我正在研究SQLite数据库.
是否可以在没有主键和外键的情况下维护两个表之间的关系
如果可能的话怎么样?
在我的模型中,我想要一个外键的可选字段.我试过这个:
field = models.ForeignKey(MyModel, null=True, blank=True, default=None)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
model.mymodel_id may not be NULL
Run Code Online (Sandbox Code Playgroud)
我正在使用sqlite编辑:如果它可以帮助,这里是异常位置:
/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py in execute, line 200
Run Code Online (Sandbox Code Playgroud)
所以这是sqlite特定的问题,我想.
我有SQL Server Express 2008.如何在其中设置表的关系?
foreign-keys ×10
sql ×4
mysql ×3
oracle ×2
sqlite ×2
constraints ×1
database ×1
django ×1
insert ×1
jdbc ×1
jpa ×1
laravel ×1
migration ×1
netbeans ×1
optional ×1
primary-key ×1
relationship ×1
select ×1
sql-server ×1
t-sql ×1