标签: foreign-keys

Django关系数据库查找

我无法弄清楚如何建立关系.

我有产品型号和商店模型.产品具有商店的外键.

所以我想在同一个查找中获取产品名称和商店名称.

由于产品型号是:

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)

django foreign-keys relationship models

2
推荐指数
1
解决办法
459
查看次数

基础数据库设计.使用另一个表或列

我有一个表,其中包含有关特定对象,Say Item和列的信息

ItemID,ItemName,price,ItemListingType ..... LastOrderDate

其中一个信息,ItemListingType可以是10种不同类型之一,例如:

私人,政府,非政府,商业...等(字符串),将来可以扩展到更多类型.

我应该在表ITEM中使用列还是应该使用具有两列的单独表并在Item表中放入一个外键来引用它(一对多关系)?喜欢:

  • ListingTypeID int

  • ListingTypeName varchar(MAX)

编辑:列的值有多少,您将考虑使用另一个表

2,4还是什么?

谢谢

sql-server foreign-keys one-to-many

2
推荐指数
1
解决办法
147
查看次数

MySQL:一个表中的两个外键引用另一个表

我之前遇到过一些看起来很简单的东西,但让我再次摸不着头脑.我有一个用户表:

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)

php mysql schema doctrine foreign-keys

2
推荐指数
1
解决办法
4978
查看次数

MYSQL alter table - 添加INDEX + FOREIGN KEY给出错误1005

这个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无法添加或更新子行:外键约束失败

mysql indexing foreign-keys alter-table mysql-error-1005

2
推荐指数
1
解决办法
5213
查看次数

在MySQL innodb中创建具有多个字段的外键约束

我有两张桌子:发票和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)

mysql sql innodb foreign-keys

2
推荐指数
1
解决办法
3939
查看次数

Oracle并引用ALL_USERS(USERNAME)

所以我需要从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 ...无论如何我怎么做这种引用?

oracle foreign-keys ora-01031

2
推荐指数
1
解决办法
629
查看次数

Mysql,innodb - 无法创建外键

使用默认引擎(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)).

这是语法问题吗?谢谢您的帮助,

mysql innodb foreign-keys

2
推荐指数
1
解决办法
6324
查看次数

使用外键从两个h2表中删除

我有一个带有两个带外键的表的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会有所帮助,但我不希望它每次都自动发生.我应该暂时允许吗?我应该使用临时表还是什么是最佳解决方案?

foreign-keys h2 cascading-deletes sql-delete

2
推荐指数
1
解决办法
5001
查看次数

如何在sqlite中使用外键?

我在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,它是主键,第二个表使用相同的表.

sqlite android foreign-keys android-sqlite

2
推荐指数
1
解决办法
371
查看次数

如何使用复合主键为表创建复合外键

我有两个复合主键表:

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 code-first entity-framework-6

2
推荐指数
1
解决办法
3945
查看次数