我无法弄清楚如何建立关系.
我有产品型号和商店模型.产品具有商店的外键.
所以我想在同一个查找中获取产品名称和商店名称.
由于产品型号是:
class Products(models.Model):
PrName = models.CharField(max_length=255)
PrCompany = models.ForeignKey(Companies)
Run Code Online (Sandbox Code Playgroud)
公司模式是:
class Companies(models.Model):
ComName = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,如何使django返回ComName(来自公司模型):
Prs = Products.objects.filter(PrName__icontains=ss)
Run Code Online (Sandbox Code Playgroud) 我有一个表,其中包含有关特定对象,Say Item和列的信息
ItemID,ItemName,price,ItemListingType ..... LastOrderDate
其中一个信息,ItemListingType可以是10种不同类型之一,例如:
私人,政府,非政府,商业...等(字符串),将来可以扩展到更多类型.
我应该在表ITEM中使用列还是应该使用具有两列的单独表并在Item表中放入一个外键来引用它(一对多关系)?喜欢:
ListingTypeID int
ListingTypeName varchar(MAX)
编辑:列的值有多少,您将考虑使用另一个表
2,4还是什么?
谢谢
我之前遇到过一些看起来很简单的东西,但让我再次摸不着头脑.我有一个用户表:
user_id (PK) | username| email | something
Run Code Online (Sandbox Code Playgroud)
...以及当一个用户查看另一个用户时"视图"的表格:
view_id (PK) | viewer_id | viewed_id | view_date
Run Code Online (Sandbox Code Playgroud)
"viewer_id"和"seen_id"都是user_ids,允许我分别搜索用户是查看者或正在查看的用户的实例.
我最初认为这两个列都是外键,但是我在schema.yml文件中创建了表(我使用的是Doctrine 1.2)并指定了两个独立的外部关系(每列一个),看来Doctrine只需要考虑到这两个表之间首先列出的外来关系(user_id> viewer_id).
现在让我感到困惑的是,这是正确的MySQL行为,Doctrine中的问题,还是我接近这个问题的方式有问题,或者没什么可担心的!一个表中是否有两个单独的外键映射到另一个表中的同一列?它是否合乎逻辑,因为JOIN仍然允许我通过user_id访问"视图"?我弄错了吗?
谢谢你的时间.
编辑 - 模式文件:
User:
relations:
View: {class: View, local: user_id, foreign: viewer_id, type: many, foreignType: one, alias: View, foreignAlias: User}
View: {class: View, local: user_id, foreign: viewed_id, type: many, foreignType: one, alias: View, foreignAlias: User}
... only difference is viewer_id/viewed_id
Run Code Online (Sandbox Code Playgroud) 这个alter table命令有什么问题:
ALTER TABLE `lp`
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , ,
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD INDEX `fk_1` (`RuleId` ASC) ;
Run Code Online (Sandbox Code Playgroud)
如果我放弃了
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...
Run Code Online (Sandbox Code Playgroud)
这是工作 ,
我得到的错误是:
Error Code : 1005
Can't create table '..' (errno: 121)
Run Code Online (Sandbox Code Playgroud)
如何在同一个字段上添加FOREIGN KEY和INDEX?
我尝试分开2个查询,首先添加INDEX,然后添加FOREIGN KEY,添加索引,但第二个查询不起作用!
当我更改外键的名称(如:'fk_2')并尝试运行它我得到一个错误:错误代码:1452无法添加或更新子行:外键约束失败
我有两张桌子:发票和invoice_items.我需要两者之间的一对多关系与级联删除(所以如果发票被删除,项目也会被删除).
发票上的主键跨越两列:invoice_number,vendor_number
invoice_items上的主键跨越三列:invoice_number,vendor_number,item_number
如何使用invoice_number&vendor_number列向invoice_items表添加外键约束?
我尝试过这个并没有用:
ALTER TABLE `invoice_items`
ADD FOREIGN KEY (`invoice_number`,`vendor_number`)
REFERENCES `invoices`(`invoice_number`,`vendor_number`) ON DELETE CASCADE;
ERROR 1005 (HY000): Can't create table 'test_db.#sql-12c8_db1ad' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
以下是表定义:
CREATE TABLE IF NOT EXISTS `invoices` (
`vendor_number` varchar(20) NOT NULL,
`invoice_number` varchar(20) NOT NULL,
`po_number` varchar(50) NOT NULL,
`inbound_message_id` int(11) NOT NULL,
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`vendor_number`,`invoice_number`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `invoice_items` (
`vendor_number` varchar(20) NOT NULL,
`invoice_number` varchar(20) NOT …Run Code Online (Sandbox Code Playgroud) 所以我需要从Employee表(idEmployee,name等)到创建帐户的真实用户进行映射.我决定添加一个表Mapping_Employee_User(idEmployee,userName),如下所示
CREATE TABLE Mapping_Employee_User(
idEmployee NUMBER(6)
CONSTRAINT FK_Mapping_Employee_User1 REFERENCES Employee (idEmployee),
userName VARCHAR2(30 BYTE)
CONSTRAINT FK_Mapping_Employee_User2 REFERENCES ALL_USERS(USERNAME),
CONSTRAINT PK_Mapping_Employee_User PRIMARY KEY (idEmployee, userName)
);
Run Code Online (Sandbox Code Playgroud)
但我得到" ORA01031权限不足原因:试图更改当前的用户名或密码..."但我实际上并没有这样做,我只是想做一个参考.
注意:我对此用户拥有完整的权利
记录为SYS我可以看到实际的表名为"USER $",我找不到表ALL_USERS ...无论如何我怎么做这种引用?
使用默认引擎(MyIsam),我可以使用以下语法创建外键:
alter table `codes` add constraint foreign key(`associated_code_id`) references ask_codes(code_id) on update cascade on delete cascade;
Run Code Online (Sandbox Code Playgroud)
但是,当我使用INNODB创建表时,我不再能够创建外键(mysql给我ERROR 1005(HY000):无法创建表'my_table.#sql-3311_16115'(错误号:150)).
这是语法问题吗?谢谢您的帮助,
我有一个带有两个带外键的表的h2数据库
CREATE TABLE master (masterId INT PRIMARY KEY, slaveId INT);
CREATE TABLE slave (slaveId INT PRIMARY KEY, something INT,
CONSTRAINT fk FOREIGN KEY (slaveId) REFERENCES master(slaveId));
Run Code Online (Sandbox Code Playgroud)
并需要类似的东西
DELETE master, slave FROM master m JOIN slave s ON m.slaveId = s.slaveId
WHERE something = 43;
Run Code Online (Sandbox Code Playgroud)
即,从两个表中删除(AFAIK在MySql中工作).因为FOREIGN KEY我不能先从master中删除.当我从奴隶中删除时,我丢失了要从主站删除哪些行的信息.使用ON DELETE CASCADE会有所帮助,但我不希望它每次都自动发生.我应该暂时允许吗?我应该使用临时表还是什么是最佳解决方案?
我在sqlite中有两个表,它们与一个id"连接".使用此表的应用程序在Android OS上运行.
表格1;:
|id| entry 1| entry2|
|1 | aaaaaa | aaaaa |
|2 | bbbbbb | bbbbb |
Run Code Online (Sandbox Code Playgroud)
表2:
|id| entryx| constant|
|1 | aaaaa | aaaaaaaa|
|1 | baaaa | baaaaaaa|
|1 | caaaa | caaaaaaa|
|2 | ababa | baabaaba|
Run Code Online (Sandbox Code Playgroud)
目前,我使用循环删除带有以下查询的条目:
do{
db.delete("Table 1","id='"+cid+"'",null);
db.delete("Table 2","id='"+cid+"'",null);
}
while(getNextID());
Run Code Online (Sandbox Code Playgroud)
我想使用外键,它允许我删除表1中的条目,并且表2中的所有条目也被删除.此外,我必须考虑表2中的数据在插入表2之前插入.如何使用外键来执行此操作?该表使用id作为int,它是主键,第二个表使用相同的表.
我有两个复合主键表:
public class Event
{
[Key]
[Column(Order = 1)]
public string ID1 { get; set; }
[Key]
[Column(Order = 2)]
public int ID2 { get; set; }
public DateTime EventDate { get; set; }
public string DocID1 { get; set; }
public int DocID2 { get; set; }
Run Code Online (Sandbox Code Playgroud)
}
public class EventDocument
{
[Key]
[Column(Order = 1)]
public string ID1 { get; set; }
[Key]
[Column(Order = 2)]
public int ID2 { get; set; }
public string Name { get; …Run Code Online (Sandbox Code Playgroud) foreign-keys ×10
mysql ×4
innodb ×2
alter-table ×1
android ×1
code-first ×1
django ×1
doctrine ×1
h2 ×1
indexing ×1
models ×1
one-to-many ×1
ora-01031 ×1
oracle ×1
php ×1
relationship ×1
schema ×1
sql ×1
sql-delete ×1
sql-server ×1
sqlite ×1