标签: foreign-keys

通过sql中的单个列引用多个表

在SQL中,表中的单个列可以引用多个表吗?

例如,如果我们有表employee(PK emp_id, name) 和customer(PK cust_id, name)

我们可以有一张桌子吗contact(id 参考文献[employee, customer], number);

或者我们是否需要制作两张表:

contact_custcust_id参考文献customer, number)和contact_empemp_id参考文献employee, number

我知道即使第一个选择可行,第二个选择也会更好。我只想知道第一种方法可行吗?

sql foreign-keys

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

MySQL:如何更改具有外键约束的字段?

我有两个通过外键约束链接的表。我想更改 ID 字段,但由于外键约束,以下代码失败:

UPDATE A SET id = 1479 WHERE id = 2103;
UPDATE B SET Aid = 1479 WHERE Aid = 2103;
Run Code Online (Sandbox Code Playgroud)

我知道我可以设置ON CASCADE自动执行此操作,但是如何根据具体情况执行此操作?

mysql foreign-keys foreign-key-relationship

3
推荐指数
1
解决办法
3479
查看次数

导入 SQlite3 转储后激活外键

当我将 DUMP 导入 SQlite3 数据库时,我必须手动再次激活foreign_keys。

PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

创建转储时,转储如下所示:

PRAGMA foreign_keys = OFF;
BEGIN TRANSACTION;
[...]
COMMIT;
Run Code Online (Sandbox Code Playgroud)

当我手动添加激活命令时,它会被忽略:

PRAGMA foreign_keys = OFF;
BEGIN TRANSACTION;
[...]
COMMIT;
PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

有没有办法在导入转储时自动重新激活外键?

sqlite dump foreign-keys

3
推荐指数
1
解决办法
1673
查看次数

Android SQLite 外键语法错误

我刚刚开始在 Android 应用程序中使用 SQLite 数据库。我正在尝试创建一个“团队”表和一个“玩家”表,并且我希望“玩家”表有一个外键,该外键引用“团队”表的自动增量 _ID 字段(我认为这个 _ID 字段来自在我的合同类中实现 BaseColumns)。我认为我的语法正确,但出现以下错误(即使在卸载并重新安装我的应用程序之后)

06-08 20:26:22.763: E/Database(29843): Failure 1 (near "playerName": syntax error) on 0x22a110 when preparing 'CREATE TABLE player (_id INTEGER PRIMARY KEY,team_ID INTEGER, FOREIGN KEY(team_ID) REFERENCES team(_id), playerName TEXT,playerAge INTEGER,playerPosition TEXT,playerHeight REAL,playerWeight REAL,playerPhoto TEXT,playerNumber INTEGER)'.
Run Code Online (Sandbox Code Playgroud)

上面的错误显示了最终尝试执行的 SQL 语句。这是生成 SQL 语句的代码(抱歉,它没有必要啰嗦,我正在学习教程):

private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
        + TeamTable.TABLE_NAME + " (" + TeamTable._ID
        + " INTEGER PRIMARY KEY," + TeamTable.COLUMN_NAME_TEAM_NAME
        + TEXT_TYPE + COMMA_SEP + TeamTable.COLUMN_NAME_TEAM_WINS
        + TEXT_TYPE + …
Run Code Online (Sandbox Code Playgroud)

database sqlite android foreign-keys syntax-error

3
推荐指数
1
解决办法
3005
查看次数

Rails find_by 和模型外键

那些天我正在学习 Ruby on Rails,以提高自己作为一名开发人员的水平,因此我开始重写我的一个 php 网站来使用该框架。
基本上该网站是一个源代码聚合器,因此我有一个语言模型和一个源模型:

class Language < ActiveRecord::Base
  has_many :sources
end

class Source < ActiveRecord::Base
  belongs_to :language
end
Run Code Online (Sandbox Code Playgroud)

与源表中的 language_id 外键绑定。
该网站的主要路线之一是:

get ':language_name/:source_name.html' => 'source#show'
Run Code Online (Sandbox Code Playgroud)

例如:

/ruby/discover-if-a-number-is-prime.html
Run Code Online (Sandbox Code Playgroud)

在 SourceController 中我声明了以下内容:

class SourceController < ApplicationController
  def show
    language_name, source_name = params[:language_name], params[:source_name]
    @language = Language.find_by_name(language_name) || not_found
    @source = Source.find_by( name: source_name, language_id: @language.id ) || not_found
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有一种聪明的方法来执行这两个查询?
也许像

@source = Source.find_by_name_and_language_name( source_name, language_name ) || not_found
Run Code Online (Sandbox Code Playgroud)

如果这是一个愚蠢的问题,我很抱歉,我也在阅读《Agile Web Development with Rails 3.2》,但与此同时我想尝试一下。
谢谢

ruby ruby-on-rails foreign-keys ruby-on-rails-3

3
推荐指数
1
解决办法
7197
查看次数

MySQL 中的查找表

我正在用 PHP/MySQL 做我的第一份工作,我需要帮助。我有一张主表:

CREATE TABLE `m4l_movies` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `Title` varchar(250) NOT NULL,
    `Rating` int(11) NOT NULL,
    `Genre` varchar(250) NOT NULL,
    `Actors` varchar(250) NOT NULL,
    `UserID` int(11) NOT NULL DEFAULT '1',
    PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=115 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

接收表单的输入,该表单具有来自这些查找表的值:

CREATE TABLE `m4l_actors` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `Actor` varchar(255) NOT NULL,
    PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=232 DEFAULT CHARSET=utf8;

CREATE TABLE `m4l_genre` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `Genre` varchar(255) NOT NULL,
    PRIMARY KEY (`ID`) …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys

3
推荐指数
1
解决办法
3万
查看次数

SQLite中的外键可以指向视图吗?

我可以定义指向视图的外键(在 SQLite 3.8.2 中)吗?

我的情况是:我有一个项目清单;每个项目都有特定的类型;每种类型都有一个插槽(属性)列表:

create table "type" ("type id" integer primary key);
create table "slot" (
  "slot id" integer primary key, 
  "type id" integer not null
    references "type" ("type id") on update cascade on delete cascade);
create table "item" (
  "item id" integer primary key
  "type id" integer not null
    references "type" ("type id") on update cascade on delete cascade);
Run Code Online (Sandbox Code Playgroud)

现在我想写一个更改日志:项目A,插槽B,值X

create table "change" (
  "item id" integer not null
    references "item" ("item …
Run Code Online (Sandbox Code Playgroud)

sqlite foreign-keys

3
推荐指数
1
解决办法
964
查看次数

外键字段的名称是否可以与其在其他表中引用的字段的名称不同?

外键字段的名称是否可以与其在其他表中引用的字段的名称不同?如果是,它如何引用另一个表?

database sqlite database-design foreign-keys

3
推荐指数
1
解决办法
9204
查看次数

在MySql中禁用插入操作中的外键检查

我有一个表,用于映射其他两个表的两个主键。我将这两个字段作为外键。映射表没有主键 当我尝试插入两个表中已有的 2 个值时,出现Cannot add or update a child row: aforeign key constraintfail错误。我该如何解决这个问题?

我的表是这样的:

CREATE TABLE IF NOT EXISTS fuse_package_component_members    
( component_id int(11) NOT NULL, 
     member_type int(11) NOT NULL, 
     member_id int(11) NOT NULL, 
     active_date date NOT NULL, 
     inactive_date date NOT NULL, 
     KEY component_id (component_id), 
     KEY member_id (member_id) ) 
   ENGINE=InnoDB DEFAULT CHARSET=latin1

ALTER TABLE fuse_package_component_members 
ADD CONSTRAINT comp_id_fk 
FOREIGN KEY (component_id) REFERENCES fuse_component_definition (component_id) ON UPDATE NO ACTION, 
ADD CONSTRAINT ele_id_fk 
FOREIGN KEY (member_id) REFERENCES fuse_product_element …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys foreign-key-relationship

3
推荐指数
1
解决办法
7052
查看次数

postgres 中的两个外键

我正在制作一个连接表。我希望它有 2 个单独的外键,引用 2 个单独表中的 ID。

create table user_book (
    id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
    book_id numeric references books (id) NOT NULL,
    user_id numeric NOT NULL references user (id),
    checked bool,
);
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ERROR:  syntax error at or near "user"
LINE 4:     user_id numeric NOT NULL references user (id),
                                                ^

********** Error **********

ERROR: syntax error at or near "user"
SQL state: 42601
Character: 202
Run Code Online (Sandbox Code Playgroud)

Postgres 是否不允许来自两个单独表的 2 个外键?

我也尝试过:

create table user_book (
    id serial primary …
Run Code Online (Sandbox Code Playgroud)

sql postgresql ddl foreign-keys

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