标签: foreign-keys

复合主键/外键头痛

我正在使用 SQL Server 2008 R2、C# 和 ASP.Net。我有一个表,它有一个由票号组成的复合主键,以及该票在表中出现的次数。工单频率由 C# 代码计算:

VTTTickets.InsertParameters[0].DefaultValue = VTTTTicketNoBox.Text;
string CommString = "SELECT COUNT(*) FROM [Tickets] WHERE [Ticket_No] = " + 
VTTTTicketNoBox.Text;
string ConnString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
OdbcConnection Conn = new OdbcConnection(ConnString);
Conn.Open();
OdbcCommand FooCommand = newOdbcCommand(CommString,Conn);
int FooVal = Convert.ToInt32(FooCommand.ExecuteScalar()) + 1;
VTTTickets.InsertParameters[1].DefaultValue = Convert.ToString(FooVal);
VTTTTicketNoBox.Text = "";
Conn.Close();
Run Code Online (Sandbox Code Playgroud)

我的表约束/等代码

CONSTRAINT [PK_Tickets] PRIMARY KEY CLUSTERED 
([Ticket_No] ASC, [Ticket_Sub_No] ASC)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = ON,
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY], …
Run Code Online (Sandbox Code Playgroud)

c# asp.net foreign-keys sql-server-2008 composite-primary-key

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

如何将外键设置为有序 id

我有以下表格定义 journal

CREATE TABLE "public"."journal" (
"id" "public"."inc_journal" NOT NULL,
"short_desc" varchar(20),
"description" varchar(1000),
"default_gl_account_id" int8,
"company_id" int2,
"creator_user_id" int4,
"created_date" timestamp(6),
"type" "public"."journal_type",
CONSTRAINT "journal_pkey" PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
;
Run Code Online (Sandbox Code Playgroud)

inc_journal 的 def 是一个像这样的序列:

CREATE SEQUENCE "public"."inc_journal"
 INCREMENT 1
 MINVALUE 1
 MAXVALUE 4294967295
 START 1
 CACHE 1;
Run Code Online (Sandbox Code Playgroud)

我希望为它设置一个外键,如下所示:

ALTER TABLE "public"."entry"
ADD FOREIGN KEY ("journal_id") REFERENCES "public"."journal" ("id");
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到一个错误:

[Err] 错误:无法实现外键约束“entry_journal_id_fkey”
详细信息:键列“journal_id”和“id”的类型不兼容:整数和 inc_journal。

我如何摆脱这个错误?
我需要设置journal_id为 typeinc_journal吗?我仍然想插入null到该字段中,所以这似乎不是正确的选择。

postgresql foreign-keys sequence

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

在表单中,如何使用外键显示来自其他模型的字段,特别是带有选项的字段?

我正在制作一个测试表格,ModelForm它有两个模型。

  1. Country
  2. Email

我正在创建基于Email模型的表单。该Country模型具有名称字段,其值由COUNTRIES列表给出。我想在 中显示名称字段,其中EmailForm包含所有COUNTRIES值。我必须使用外键吗?请指导。

我的模型看起来像这样:

COUNTRIES = (('IND', 'India'), ('PAK', 'Pakistan'), ('AMR', 'America'))

class Country(models.Model):
    name = models.CharField(max_length=3, choices=COUNTRIES)

class Email(models.Model):
    title = models.CharField(max_length=50)
    country = models.ForeignKey('Country')
    sender = models.EmailField(max_length=20)
    date = models.DateTimeField()
    text = models.CharField(max_length=20)

class EmailForm(ModelForm):
    class Meta:
        model = Email
Run Code Online (Sandbox Code Playgroud)

如果我从中生成一个表格。它显示了一个空白的下拉菜单。如何从列表中获取值?

python django foreign-keys modelform models

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

使用外键引用行数计数的多表选择

我有与外键相关的表,我尝试通过SQL Server上的内连接准备一个视图来组合它们.我不知道是否使用内连接方式,但无论如何我无法得到我想要的东西.

表格如下(我有2个以上表格):

表1:

| ID | Bla Bla... |
Run Code Online (Sandbox Code Playgroud)

表2:

| ID | Table1ID | Bla Bla... |
Run Code Online (Sandbox Code Playgroud)

我试过的查询是这样的:

Select 
    Table1.ID, COUNT(Table2.ID) as FooCount
From
    Table1 
Inner Join
    Table2 on Table2.Table1ID = Table1.ID
Run Code Online (Sandbox Code Playgroud)

我想看到的结果应该是这样的:

|    ID    | FooCount |
-----------------------
|    1     |    45    |
|    2     |    75    |
|    3     |    98    |
|    4     |    100   |
|    5     |    11    |
|    6     |    37    |
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

sql t-sql join foreign-keys count

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

如何使用FK设置集合属性?

我有一个Business和一个Category模型.

每个Business都有很多Categories通过暴露的集合(Category无视Business实体).

现在这是我的控制器动作:

[HttpPost]
[ValidateAntiForgeryToken]
private ActionResult Save(Business business)
{
  //Context is a lazy-loaded property that returns a reference to the DbContext
  //It's disposal is taken care of at the controller's Dispose override.
  foreach (var category in business.Categories)
   Context.Categories.Attach(category);

  if (business.BusinessId > 0)
   Context.Businesses.Attach(business);
  else
   Context.Businesses.Add(business);

   Context.SaveChanges();
   return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

现在有几个business.Categories已经CategoryId设置为现有Category(缺少tho 的Title属性Category).

从服务器点击SaveChanges并重新加载后Business,Categories …

c# many-to-many entity-framework foreign-keys ef-code-first

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

Django外键QuerySet(加入)

所以我正在学习Django并试图通过仅使用Django ORM函数来获取外键值.我有2个表:用户表(默认Django auth_user系统表)和包含student_id,user_id(FK)和nr_indeksu的学生表(它是包含学生特定信息的附加信息的数字).

class Student(models.Model):
    user = models.ForeignKey(User)
    nr_indeksu = models.BigIntegerField()

    def __unicode__(self):
        return unicode(self.user
Run Code Online (Sandbox Code Playgroud)

我想通过User模型获取nr_indeksu.换句话说,执行此查询(使用QuerySet):

SELECT nr_indeksu FROM auth_user
INNER JOIN courses_student on auth_user.id = courses_student.user_id;
Run Code Online (Sandbox Code Playgroud)

我尝试过使用select_related()函数:

u = User.objects.select_related().get(pk=2)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试访问nr_indeksu时:

u.nr_indeksu
Run Code Online (Sandbox Code Playgroud)

我得到User对象没有属性的错误(这是有道理的,因为nr_indeksu在学生模型中,但我不能从用户那里获取它?)

python django orm foreign-keys

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

Sql - 间接外键

我对数据库设计有一些疑问.

  1. 这有名字吗?
  2. 这是好习惯吗?
  3. 任何性能考虑?

我有一个用于存储关系的通用表结构.

最近我重构了一些使用这种通用结构而不是直接Fk列的东西,但现在我不确定这是否真的是最好的主意.

原始架构:


 +------------------+       +---------------------+    +----------------------+
 | Book             |       | Note                |    | MetaParent           |
 |------------------|       |---------------------|    |----------------------|
 | Id               |       | Id                  |    | Id                   |
 | NoteId           |       | MetaParentId:(Null) |    | MetaTableId          |
 |                  +-------+                     +----+ KeyValue             |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 +------------------+       +---------------------+    +----------------------+

新架构


 +------------------+ …

database-design foreign-keys relational-database

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

SQLite:ON DELETE CASCADE的性能不佳

我在我的应用程序中使用SQLite数据库来存储测量数据.

它在项目中分组.这些表与外键互连,ON DELETE CASCADE用于处理链接.数据库看起来像这样:

  • 表项目
  • 表组(外键:project_id)
  • 表文件(外键:group_id)
  • 表数据点(外键:file_id)

所有外键引用的列都声明为

project_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT.

外键是这样声明的

FOREIGN KEY(project_id) REFERENCES Projects(project_id) ON DELETE CASCADE

现在我有1个项目,项目中有1个组,该组中有800个文件,每个文件大约有60个数据点.

删除组合DELETE FROM Groups WHERE project_id=1效果很好,但需要大约21秒,这对我的需求来说太长了.

我已将删除包装在一个Transaction中.

我是SQL和SQLite的极端新手.这个持续时间是正常的还是有办法加快速度?我需要删除该组以填写更新的值.在我的应用程序中,我只想将一个项目保留在内存中,所以只需删除整个数据库并从头开始填充它(虽然快得多,~1 sek)并不是一个真正的选择.

这些表是这样创建的:

'Create projects table
cmd.CommandText = "CREATE TABLE IF NOT EXISTS Projects ( ProjectID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " & _
        "name TEXT NOT NULL, comment TEXT, date DATETIME2, diameter FLOAT(53), thickness FLOAT(53) );"

'Create Groups table
cmd.CommandText &= vbNewline …
Run Code Online (Sandbox Code Playgroud)

sql database sqlite foreign-keys

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

peewee:反向引用外键时,获取单个模型而不是SelectQuery

我在向后引用外键方面有些挣扎peewee。考虑以下代码:

import peewee as pw

db = pw.SqliteDatabase(':memory:')

class Parent(pw.Model):
    name = pw.CharField()

    class Meta:
        database = db


class Child(pw.Model):
    name = pw.CharField()
    parent = pw.ForeignKeyField(Parent, related_name="kid")

    class Meta:
        database = db

db.create_tables([Parent, Child])

bob = Parent.create(name="Bob")
alice = Child.create(name="Alice", parent=bob)
Run Code Online (Sandbox Code Playgroud)

可以与Bob的孩子接触bob.kid,这可以给我一个机会SelectQuery。但是,根据设计,我知道任何一个Parent都只能有一个Child。然后可以使用访问该孩子bob.kid[0]

我希望能够通过简单地调用而不是Child从a 访问。无需进一步修改类就可以实现吗?Parentbob.kidbob.kid[0]Parent

python foreign-keys peewee

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

Django表单不能用ModelChoiceField保存 - ForeignKey

我的网站上有多个表单可以工作并将信息保存到我的PostgreSQL数据库中.我正在尝试创建一个表单来保存我的Set Model的信息:

class Set(models.Model):
    settitle = models.CharField("Title", max_length=50)
    setdescrip = models.CharField("Description", max_length=50)
    action = models.ForeignKey(Action)
    actorder = models.IntegerField("Order number")
Run Code Online (Sandbox Code Playgroud)

Set Form看起来像这样.我正在使用ModelChoiceField从Action模型中提取Action名称字段列表,它在表单上显示为选择下拉列表

class SetForm(ModelForm):

    class Meta:
        model = Set
        fields = ['settitle', 'setdescrip', 'action', 'actorder']
    action = forms.ModelChoiceField(queryset = Action.objects.values_list('name', flat=True), to_field_name="id")
Run Code Online (Sandbox Code Playgroud)

createset的视图如下:

def createset(request):
    if not request.user.is_authenticated():
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    elif request.method == "GET":
        #create the object - Setform 
        form = SetForm;
        #pass into it 
        return render(request,'app/createForm.html', { 'form':form })
    elif "cancel" in request.POST:
        return HttpResponseRedirect('/actions')
    elif request.method …
Run Code Online (Sandbox Code Playgroud)

django foreign-keys save django-models django-forms

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