search
HomeBackend DevelopmentPHP Tutorial逻辑结构相同的表是否应该合成一张表?

逻辑结构相同的表是否应该合成一张表?

Jun 06, 2016 pm 08:44 PM
phpDatabase Designobject-oriented design patterns

在新公司做项目的时候, 遇到的技术领导要求将逻辑结构相同的表全部合成一张表.
例如:

<code>comment #评论表
    id
    user_id
    content
    reply_id
    add_time

message #私信表
    id
    user_id
    reply_user_id
    content
    reply_id
    add_time
</code>

两张表结构相同, 然后领导让结构相同的表合并, 再加一个type进行处理, 这样可以减少相同的代码. 我觉得这样不太好, 万一之后增加功能就会比较头痛, 如果是为了减少代码的话, 两张相同结构表的model继承同一个model也就可以了, 不至于要把功能不同的表合并成一张吧, 以后如果为了节约性能, 不是还得拆表?

大家是怎样认为的呢?

回复内容:

在新公司做项目的时候, 遇到的技术领导要求将逻辑结构相同的表全部合成一张表.
例如:

<code>comment #评论表
    id
    user_id
    content
    reply_id
    add_time

message #私信表
    id
    user_id
    reply_user_id
    content
    reply_id
    add_time
</code>

两张表结构相同, 然后领导让结构相同的表合并, 再加一个type进行处理, 这样可以减少相同的代码. 我觉得这样不太好, 万一之后增加功能就会比较头痛, 如果是为了减少代码的话, 两张相同结构表的model继承同一个model也就可以了, 不至于要把功能不同的表合并成一张吧, 以后如果为了节约性能, 不是还得拆表?

大家是怎样认为的呢?

我认为所有有关数据库设计的问题,都要从「查询」这个角度来考虑。即你要预计一下你今后会如何查询这个表,再考虑如何设计结构。

回到问题,你可以考虑一下:

  • 评论是否总是和私信一起查询
  • 是否有必要在查找私信的时候查找一遍评论
  • 评论和私信的 ID 是否有必要使用同一个序列

楼主可以反过来思考,拆表。
一些访问量比较大的站,日志标题和描述是一个表,日志内容是一个表
因为别人访问日志列表的时候不一定要看到日志内容,多的日志查询就会造成一种浪费
表的合并,我认为主要是看他们在查询时,是否需要经常一起显示,如果仅仅是为了减少代码量,这个完全没有必要吧,随着以后系统用户评论内容和私信内容的增加,势必会影响到效率

数据库的表,一般情况下代表一个业务对象,如果两个业务对象属于同一类型,只是分不同类型有个别不同的字段,可以考虑公用一张表,然后用一个type字段进行区分。

楼主的例子里面,评论和私信显然不是一个业务对象,表里面的content,reply_id虽然名称相同,但代表的业务含义完全不同,所以建议分成两张表。否则后期维护的时候非常麻烦,运维的人刚开始肯定不理解,为什么同一个字段,在数据库里面根据另外另外一个type字段有不同的含义。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

Simple Guide: Sending Email with PHP ScriptSimple Guide: Sending Email with PHP ScriptMay 12, 2025 am 12:02 AM

PHPisusedforsendingemailsduetoitsbuilt-inmail()functionandsupportivelibrarieslikePHPMailerandSwiftMailer.1)Usethemail()functionforbasicemails,butithaslimitations.2)EmployPHPMailerforadvancedfeatureslikeHTMLemailsandattachments.3)Improvedeliverability

PHP Performance: Identifying and Fixing BottlenecksPHP Performance: Identifying and Fixing BottlenecksMay 11, 2025 am 12:13 AM

PHP performance bottlenecks can be solved through the following steps: 1) Use Xdebug or Blackfire for performance analysis to find out the problem; 2) Optimize database queries and use caches, such as APCu; 3) Use efficient functions such as array_filter to optimize array operations; 4) Configure OPcache for bytecode cache; 5) Optimize the front-end, such as reducing HTTP requests and optimizing pictures; 6) Continuously monitor and optimize performance. Through these methods, the performance of PHP applications can be significantly improved.

Dependency Injection for PHP: a quick summaryDependency Injection for PHP: a quick summaryMay 11, 2025 am 12:09 AM

DependencyInjection(DI)inPHPisadesignpatternthatmanagesandreducesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itallowspassingdependencieslikedatabaseconnectionstoclassesasparameters,facilitatingeasiertestingandscalability.

Increase PHP Performance: Caching Strategies & TechniquesIncrease PHP Performance: Caching Strategies & TechniquesMay 11, 2025 am 12:08 AM

CachingimprovesPHPperformancebystoringresultsofcomputationsorqueriesforquickretrieval,reducingserverloadandenhancingresponsetimes.Effectivestrategiesinclude:1)Opcodecaching,whichstorescompiledPHPscriptsinmemorytoskipcompilation;2)DatacachingusingMemc

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version