标签: multi-table

Django多表继承VS在模型中指定显式的OneToOne关系

希望这一切都有道理:)如果有必要,我会通过评论澄清.另外,我正在尝试在这个问题中使用粗体文本,如果我(或你)发现它分散注意力,我会编辑它.随着那个...

使用django.contrib.auth为我们提供了用户和组,以及其他一些我不能没有的有用的东西(比如基本消息).

在我的应用程序中,我有几种不同类型的用户.用户只能是一种类型.这可以很容易地由小组处理,稍微小心点.但是,这些不同的用户在层次结构/关系中彼此相关.

我们来看看这些用户: -

校长 - "顶级"用户

管理员 - 每个管理员向校长报告

协调员 - 每个协调员向管理员报告

除此之外,还有其他用户类型不直接相关,但可能会在以后相关.例如,"公司"是另一种类型的用户,并且可以具有各种"产品",并且产品可以由"协调员"监督."买方"是另一种可能购买产品的用户.

现在所有这些用户都有各种其他属性,其中一些属性对所有类型的用户都是通用的,其中一些属性仅与一种用户类型不同.例如,所有类型的用户都必须拥有一个地址.另一方面,只有Principal用户属于"BranchOffice".

另一点,如上所述,用户只能是一种类型.

该应用程序还需要跟踪谁创建和/或修改了校长,管理员,协调员,公司,产品等.(这是用户模型的另外两个链接.)

在这种情况下,使用Django的多表继承是一个好主意如下: -

from django.contrib.auth.models import User
class Principal(User):
    #
    #
    #    
    branchoffice = models.ForeignKey(BranchOffice)
    landline = models.CharField(blank=True, max_length=20)    
    mobile = models.CharField(blank=True, max_length=20)
    created_by = models.ForeignKey(User, editable=False, blank=True, related_name="principalcreator")    
    modified_by = models.ForeignKey(User, editable=False, blank=True, related_name="principalmodifier")
    #
    #
    #
Run Code Online (Sandbox Code Playgroud)

或者我应该这样做: -

class Principal(models.Model):
    #
    #
    #
    user = models.OneToOneField(User, blank=True)
    branchoffice = models.ForeignKey(BranchOffice)
    landline = …
Run Code Online (Sandbox Code Playgroud)

django inheritance multi-table

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

Django多表继承:指定自定义的一对一列名

我正在尝试创建一个与现有数据模型兼容的Django ORM映射,因此我尝试使用现有的一组表名和列名.

我有一个多表继承的情况,其中一个类InformationObject派生自类Object.我想让Django以通常的方式处理这个问题:

class Object(models.Model):
    class Meta:
        db_table = "object"          

class InformationObject(Object):
    class Meta:
        db_table = "information_object"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Django会自动在继承模型上创建一个名为object_ptr_id的一对一字段.但是,在我被限制使用的模式上,对Object的引用简称为"id".所以:

有没有办法以某种方式指定Django自动神奇地用于多表继承的列的名称?

替代方案,我将不得不使用,是使用显式的一对一字段,但后来我将无法从Object模型继承非数据库方法:

class Object(models.Model):
    class Meta:
        db_table = "object"          

class InformationObject(models.Model):
    class Meta:
        db_table = "information_object"
    id = models.OneToOneField(Object, primary_key=True, db_column="id")  
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?也许我可以为它们创建一个公共基类并将非db方法放在那里......?

django inheritance multi-table

8
推荐指数
1
解决办法
4370
查看次数

Django Admin中具有多表继承的ValueError

我创建了两个继承模型Entry的新类:

class Entry(models.Model):
    LANGUAGE_CHOICES = settings.LANGUAGES

    language = models.CharField(max_length=2, verbose_name=_('Comment language'), choices=LANGUAGE_CHOICES)
    user = models.ForeignKey(User)
    country = models.ForeignKey(Country, null=True, blank=True)

    created = models.DateTimeField(auto_now=True)

class Comment(Entry):
    comment = models.CharField(max_length=2000, blank=True, verbose_name=_('Comment in English'))

class Discount(Entry):
    discount = models.CharField(max_length=2000, blank=True, verbose_name=_('Comment in English'))
    coupon = models.CharField(max_length=2000, blank=True, verbose_name=_('Coupon code if needed'))
Run Code Online (Sandbox Code Playgroud)

通过admin.site.register将这些新模型添加到管理员后,我在尝试通过管理员创建评论或折扣时收到ValueError.添加条目工作正常.

错误消息:

/ admin/reviews/discount/add /中的ValueError不能指定"''":"Discount.discount"必须是"Discount"实例.请求方法:GET请求URL:http://127.0.0.1 :8000/admin/sort/amount/ add / Exception Type:ValueError异常值:
不能赋值"''":"Discount.discount"必须是"Discount"实例.异常位置:/Library/Python/2.6/site-packages/django/db/models/fields/related.py in set,第211行Python可执行文件:/ usr/bin/python Python版本:2.6.1

django django-admin multi-table

5
推荐指数
1
解决办法
909
查看次数

PostgreSQL 是否实现了多表索引?

我已经找了一个星期了,恐怕这可能不存在[还]。我想在 PostgreSQL 中使用一个跨越多个表的索引。Oracle 和 SQL 服务器似乎实现了它们(或多或少的选项)。

对于我需要实现的某些搜索,它可能非常有用。

作为参考,这里是Oracle 和 SQL Server的多表索引示例:

甲骨文示例

Oracle可以创建位图连接索引,如下图:

create table dealer (
  id int primary key not null,
  city varchar2(20) not null
);

create table car (
  id int primary key not null,
  brand varchar2(20),
  price int,
  dealer_id int references dealer (id)
);

create bitmap index bix1 on car (d.city, c.brand)
from car c, dealer d
where d.id = c.dealer_id;

select avg(c.price)
from dealer d
join car c on c.dealer_id = …
Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing query-performance multi-table

5
推荐指数
1
解决办法
867
查看次数

SQL插入包含来自多个表的数据

我有四个表:Messages,MessageCategory,MessageStatus和MessageLevel.

MessageCategory,MessageStatus和MessageLevel都只有三个字段:Identity(主键),Code和Description.消息引用这三个字段并具有一些其他数据字段,包括Identity(主键)MessageText和Order.标识字段是自动递增的字段.

我现在需要编写一个SQL脚本来向所有四个表添加一些默认数据.问题是,我需要创建一个脚本,该脚本将发送给客户,然后客户将执行此脚本.我不能写一些更智能的代码来完成整个更新.虽然三个表只是简单的插入语句,但是Messages表会引起一些额外的麻烦.

我无法删除任何索引,我不能假设它从1开始计算主键.

所以,作为一个例子,她的一些数据:

INSERT INTO MessageCategory (Code) Values ('Cat01');
INSERT INTO MessageStatus (Code) Values ('Status01');
INSERT INTO MessageLevel (Code) Values ('Level01');
Run Code Online (Sandbox Code Playgroud)

消息需要这样的东西:

INSERT INTO Messages(Category, Status, Level, MessageText, Order) 
VALUES(
  (SELECT Identity from MessageCategory where Code='Cat01'), 
  (SELECT Identity from MessageStatus where Code='Status01'), 
  (SELECT Identity from MessageLevel where Code='Level01'), 
  'Just some message', 
  1
);
Run Code Online (Sandbox Code Playgroud)

但这不起作用.那么,让这个工作的诀窍是什么?(保持代码可读......)

不幸的是,我无法访问其他数据库.我可以测试它,但一旦它似乎工作,它只是发送和祈祷它的工作...

sql-server insert multi-table

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

来自多个表的SugarORM查询?

我正在将SugarORM用于我的Android应用程序。在我的项目中,我有几个表,我想知道是否有办法将它们连接到另一个具有多个表中的列的类对象中?

如果是,那么示例将非常有帮助。

sqlite android multi-table sugarorm

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

mysql - 从一个表中选择所有表,从另一个表中选择一列,其中找到$ var

Ooooookay.我有两个表客户端和用户.两者都有AUTO_INCREMENT id但客户端表有credid-column whis是外键并且引用了users表的id.

我想准备一个PHP PDO语句,它从client-table中获取所有列,并且只从users-table获取username-column,其中client table的列credid =:var和user table的column id =:var

到目前为止,我有类似的东西,它不起作用

$userid = $_SESSION['id']; //echoes a number
    $STH = $DBH->prepare("SELECT * FROM client WHERE credid = :id AND username FROM users
    WHERE id = :id");
    $credentials = array(
        ':id' => $userid
    );
    $STH->execute($credentials);
Run Code Online (Sandbox Code Playgroud)

然后这样

    if ($STH->rowCount() > 0) {
        $result = $STH->fetch(PDO::FETCH_ASSOC);
        echo $result['columnfoo'];
        echo $result['anothercolumn'];
        echo etc.
        .
        .
        .

    }
Run Code Online (Sandbox Code Playgroud)

这返回有关sql语法的错误....

我也尝试过这样的事情:

    SELECT client.*,users.username FROM client,users WHERE client.credid =users.id = :id
Run Code Online (Sandbox Code Playgroud)

返回没有错误但不返回任何数据......我应该如何构建我准备好的查询?

sql prepared-statement fetch multi-table

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

具有多个select语句的复杂MySQL查询

我在Mysql中有三个链接在一起的表:

个人资料(身份证,姓名,东西......)

联系(ID,ProfileID,desc,Ord)

地址(ID,ProfileID,desc,Ord)

现在我需要从配置文件表中选择所有配置文件,其中包含“desc”来自Contact和Address 的字段,其中Ord = 1.(这是一个搜索功能,在表格中我将显示名称,主要联系信息和主要地址客户.

我目前可以使用三个单独的SQL请求执行此操作:

SELECT Name, ID FROM Profile WHERE name=”bla”
Run Code Online (Sandbox Code Playgroud)

然后在foreach循环中,我将运行另外两个请求:

SELECT ProfileID, desc FROM Contact WHERE ProfileID=MyProfileID AND Ord=1
SELECT ProfileID, desc FROM Address WHERE ProfileID=MyProfileID AND Ord=1
Run Code Online (Sandbox Code Playgroud)

我知道你可以SELECT在一个查询中做多个,有没有办法将所有三个组合SELECT成一个查询?

mysql select multi-table

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

多表数据库SQLite android

我是数据库(SQLite)的新手,我正在尝试在android中创建一个多表数据库.每个表都有相同的行(id,name,ph_number).每个表都存储一个"联系"对象.

当我想使用方法addContactDatos(Contact contact,int partido)将联系人存储在一个表中时,它存储在每个表中,而不仅仅存储在我想要的表中.我该如何解决?

这是处理程序:

public class DatabaseHandler extends SQLiteOpenHelper {

// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contacts Tables  names
private static final String TABLE_PRIMERO = "contacts";
private static final String TABLE_SEGUNDO = "contacts";
private static final String TABLE_TERCERO = "contacts";  
private static final String TABLE_CUARTO = "contacts";

// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME …
Run Code Online (Sandbox Code Playgroud)

database sqlite android multi-table

0
推荐指数
1
解决办法
2444
查看次数